In cluster computing or in a distributed computing environment, a compute cluster is a set of computers connected over a network with resource usage within the cluster coordinated by a workload or resource manager. Typically, a user submits a job (a request to run an instance of an application) to the resource manager. The resources required to run the job may be specified by the user with the job submission or allocated as needed by the resource manager. The resource manager assigns idle resources to the job when available, and runs the job.
The workload of each compute cluster may be managed by a workload scheduler. In some cases, a resource may be shared among multiple independent clusters. Thus, certain resources may need to be allocated across the different compute clusters of the organization. In distributed application scenarios, the application may be data-intensive and compute-intensive. For example, applications are often hosted in a multi-tenancy environment where distributed computers, network, and storages are shared by other applications so as to minimize infrastructure and management costs. Some of these application may also have constraints such as response times, such as interactive or near real-time decision making applications used in stock purchases and personalized recommendations for mobile device users.